/**
 * 判断url是否是http或https
 * @param {string} url - 需要判断的URL
 * @returns {boolean} - 如果URL以'http://'或'https://'开头则返回true，否则返回false
 */
export function isHttp(url: string): boolean {
    return url.indexOf('http://') !== -1 || url.indexOf('https://') !== -1;
  }
  
  /**
   * 判断path是否为外链
   * @param {string} path - 需要判断的路径
   * @returns {boolean} - 如果路径以'http://'、'https://'、'mailto:'或'tel:'开头则返回true，否则返回false
   */
  export function isExternal(path: string): boolean {
    return /^(https?:|mailto:|tel:)/.test(path);
  }
  
  /**
   * 检查用户名是否有效
   * @param {string} str - 需要验证的用户名字符串
   * @returns {boolean} - 如果用户名在预定义的有效用户名列表中则返回true，否则返回false
   */
  export function validUsername(str: string): boolean {
    const valid_map = ['admin', 'editor'];
    return valid_map.indexOf(str.trim()) >= 0;
  }
  
  /**
   * 检查URL是否有效
   * @param {string} url - 需要验证的URL
   * @returns {boolean} - 如果URL符合有效的格式则返回true，否则返回false
   */
  export function validURL(url: string): boolean {
    const reg = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/;
    return reg.test(url);
  }
  
  /**
   * 检查字符串是否全部为小写字母
   * @param {string} str - 需要验证的字符串
   * @returns {boolean} - 如果字符串只包含小写字母则返回true，否则返回false
   */
  export function validLowerCase(str: string): boolean {
    const reg = /^[a-z]+$/;
    return reg.test(str);
  }
  
  /**
   * 检查字符串是否全部为大写字母
   * @param {string} str - 需要验证的字符串
   * @returns {boolean} - 如果字符串只包含大写字母则返回true，否则返回false
   */
  export function validUpperCase(str: string): boolean {
    const reg = /^[A-Z]+$/;
    return reg.test(str);
  }
  
  /**
   * 检查字符串是否全部为字母
   * @param {string} str - 需要验证的字符串
   * @returns {boolean} - 如果字符串只包含字母（无论大小写）则返回true，否则返回false
   */
  export function validAlphabets(str: string): boolean {
    const reg = /^[A-Za-z]+$/;
    return reg.test(str);
  }
  
  /**
   * 检查邮箱地址是否有效
   * @param {string} email - 需要验证的邮箱地址
   * @returns {boolean} - 如果邮箱地址格式正确则返回true，否则返回false
   */
  export function validEmail(email: string): boolean {
    const reg = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
    return reg.test(email);
  }
  
  /**
   * 检查参数是否为字符串
   * @param {any} str - 需要验证的参数
   * @returns {boolean} - 如果参数是字符串类型则返回true，否则返回false
   */
  export function isString(str: any): boolean {
    if (typeof str === 'string' || str instanceof String) {
      return true;
    }
    return false;
  }
  
  /**
   * 检查参数是否为数组
   * @param {any} arg - 需要验证的参数
   * @returns {boolean} - 如果参数是数组类型则返回true，否则返回false
   */
  export function isArray(arg: any): boolean {
    if (typeof Array.isArray === 'undefined') {
      return Object.prototype.toString.call(arg) === '[object Array]';
    }
    return Array.isArray(arg);
  }